package forceCast;

import staticandfinal.User;

import java.util.Arrays;

public class CastTest {



    // 高精度向低精度可以强转，低精度自动转为高精度
    public static void test2() {
        double d = 1.5f;
        int pow = (int)Math.pow(2.0, 3.0);
        double pow1 = Math.pow(2.0, 3.5);
        System.out.println("指数："+pow);
        System.out.println("指数1："+pow1);
    }
    // 不同类型不能强转
    public static void test() {
        // 报错：不能直接转换
        Father father = new Father(36, "fangqing");
        Son s = (Son) father;
        System.out.println(s);
    }
    // 可以将父类引用的子类对象(多态)，强制转换为子类类型。（本质是恢复子类的功能）
    public static void test1() {
        Father father = new Son(12);
        System.out.println(father);
        Son son = (Son) father;
        System.out.println("上转型对象强制转换:"+son);
    }
    // 可以将子类对象，强制转换为父类类型。
    // 本质是削弱子类型的功能，只具备与父类同属性的功能，其他的功能存在，但是不能调用。
    public void test3() {
        Son s = new Son(12);
        // 为什么这里赋值没有成功
        s.setAge(17);
        s.setName("fang");
        System.out.println(s);
        Father father = (Father) s;
        // 调用的是Son类的toString方法，getAge方法
        System.out.println("子类对象转换为父类对象:"+father);
        // 无法调用Son类的getTall方法
        System.out.println(father.getAge());
    }
}
